package com.wdb007.venus.svc.biz.utils;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class MapUtils {
	// private static double EARTH_RADIUS = 6378.137;
	private static double EARTH_RADIUS = 6371.393;

	private static double rad(double d) {
		return d * Math.PI / 180.0;
	}

	/**
	 * 计算两个经纬度之间的距离
	 * 
	 * @param lat1
	 * @param lng1
	 * @param lat2
	 * @param lng2
	 * @return
	 */
	private static double GetDistance(double lat1, double lng1, double lat2, double lng2) {
		double radLat1 = rad(lat1);
		double radLat2 = rad(lat2);
		double a = radLat1 - radLat2;
		double b = rad(lng1) - rad(lng2);
		double s = 2 * Math.asin(Math.sqrt(
				Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
		s = s * EARTH_RADIUS;
		s = Math.round(s * 1000);
		return s;
	}

	public static String getDistance(BigDecimal lat1, BigDecimal lng1, BigDecimal lat2, BigDecimal lng2) {
		double s = GetDistance(lat1.doubleValue(), lng1.doubleValue(), lat2.doubleValue(), lng2.doubleValue());
		if(Double.compare(s, 1000) > 0) {
			double km = s / 1000;
			BigDecimal bd = new BigDecimal(km);
			return bd.setScale(2,RoundingMode.FLOOR).doubleValue() + "公里";
		}else {
			return ((int)s) + "米";
		}
	}
	
	public static String getDistance(BigDecimal distance) {
		double s = distance.doubleValue();
		if(Double.compare(s, 1000) > 0) {
			double km = s / 1000;
			BigDecimal bd = new BigDecimal(km);
			return bd.setScale(2,RoundingMode.FLOOR).doubleValue() + "公里";
		}else {
			return ((int)s) + "米";
		}
	}
	public static void main(String[] args) {
		System.out.println(MapUtils.GetDistance(29.490295, 106.486654, 29.615467, 106.581515));
		double d = 3.3333;
		BigDecimal bd = new BigDecimal(d);
		System.out.println(bd.setScale(2,RoundingMode.FLOOR).doubleValue());
	}
}
